home *** CD-ROM | disk | FTP | other *** search
/ Image Library 3 / Image Library 3.iso / cdrom.mst < prev    next >
Text File  |  1994-11-26  |  13KB  |  502 lines

  1. '**************************************************************************
  2. '*           MSSetup Toolkit - Image Library 3 Setup            *
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. CONST WS_VISIBLE=&H10000000
  11. CONST WS_BORDER =&H00800000
  12. CONST WS_CLIPCHILDREN =&H02000000
  13. CONST GWL_STYLE =-16
  14. CONST SW_SHOWMAXIMIZED=3
  15.  
  16. DECLARE FUNCTION ShowWindow LIB "user.exe" (hWnd%,iShow%) AS INTEGER
  17. DECLARE FUNCTION SetWindowLong LIB "user.exe" (hWnd%,offset%,style&) AS LONG
  18.  
  19. hWnd%=HwndFrame()
  20.  
  21. sti&=SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN)
  22. stj%=ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  23.  
  24. ''Dialog ID's
  25. CONST WELCOME      = 100
  26. CONST ASKQUIT      = 200
  27. CONST DESTPATH     = 300
  28. CONST EXITFAILURE  = 400
  29. CONST EXITQUIT     = 600
  30. CONST EXITSUCCESS  = 700
  31. CONST APPHELP      = 900
  32. CONST CUSTINST     = 6200
  33. CONST TOOBIG       = 6300
  34. CONST BADPATH      = 6400
  35. CONST PCDSCSI      = 7200
  36.  
  37. ''Bitmap ID
  38. CONST LOGO         = 1
  39.  
  40. ''File Types
  41. CONST IMAGEFILES    = 1
  42.  
  43. GLOBAL DEST$        ''Default destination directory.
  44. GLOBAL WINDRIVE$    ''Windows drive letter.
  45. GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
  46. GLOBAL OPT2OPT$     ''Option selection from OptFiles2 option dialog.
  47. GLOBAL OPT3OPT$     ''Option selection from OptFiles3 option dialog.
  48. GLOBAL OPT4OPT$     ''Option selection from OptFiles4 option dialog.
  49. GLOBAL MosDir$      ''Location of old mosaic program, if found.
  50. GLOBAL MosFlag$      ''Flag for old mosaic program, if found.
  51.  
  52. FLAG1$          ="No"      '' Copy flags for
  53. FLAG2$          ="No"      '' DLL files that go
  54. FLAG3$          ="No"      '' into WindowsDir and WindowsSysDir
  55.  
  56. ''CustInst list symbol names
  57. GLOBAL IMAGENEEDS$    ''Option list costs per drive
  58.  
  59. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  60. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  61.  
  62. ''Dialog list symbol names
  63. GLOBAL CHECKSTATES$
  64. GLOBAL STATUSTEXT$
  65. GLOBAL DRIVETEXT$
  66.  
  67.  
  68. DECLARE SUB AddOptFilesToCopyList (ftype%)
  69. DECLARE SUB RecalcOptFiles (ftype%)
  70. DECLARE SUB RecalcPath
  71. DECLARE SUB SetDriveStatus
  72. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  73.  
  74.  
  75.  
  76. INIT:
  77.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  78.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  79.  
  80.     SetBitmap CUIDLL$, LOGO
  81.     SetTitle "Image Library 3 Setup"
  82.  
  83.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  84.     IF szInf$ = "" THEN
  85.     szInf$ = GetSymbolValue("STF_CWDDIR") + "CDROM.INF"
  86.     END IF
  87.     ReadInfFile szInf$
  88.  
  89.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  90.     WINDIR$ = GetWindowsDir()
  91.     DEST$ = WINDRIVE$ + ":\"
  92.  
  93.     ''CustInst list symbols
  94.     CHECKSTATES$ = "CheckItemsState"
  95.     STATUSTEXT$  = "StatusItemsText"
  96.     DRIVETEXT$   = "DriveStatusText"
  97.     FOR i% = 1 TO 8 STEP 1
  98.     AddListItem CHECKSTATES$, "ON"
  99.     NEXT i%
  100.     FOR i% = 1 TO 8 STEP 1
  101.     AddListItem STATUSTEXT$, ""
  102.     NEXT i%
  103.     FOR i% = 1 TO 7 STEP 1
  104.     AddListItem DRIVETEXT$, ""
  105.     NEXT i%
  106.     ReplaceListItem DRIVETEXT$, 7, DEST$
  107.  
  108.     ''Disk cost list symbols
  109.     IMAGENEEDS$  = "IMAGENeeds"
  110.     EXTRACOSTS$ = "ExtraCosts"
  111.     BIGLIST$    = "BigList"
  112.     FOR i% = 1 TO 5 STEP 1
  113.     AddListItem BIGLIST$, ""
  114.     NEXT i%
  115.     FOR i% = 1 TO 26 STEP 1
  116.     AddListItem EXTRACOSTS$, "0"
  117.     NEXT i%
  118.  
  119.     ''File Option Variables
  120.     OPT1OPT$ = "1"
  121.     OPT2OPT$ = "1"
  122.     OPT3OPT$ = "1"
  123.     OPT4OPT$ = "1"
  124.  
  125.     RecalcPath
  126.     SetDriveStatus
  127.  
  128. '$IFDEF DEBUG
  129.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  130. '$ENDIF ''DEBUG
  131.  
  132.  
  133. WELCOME:
  134.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  135.     IF sz$ = "CONTINUE" THEN
  136.     UIPop 1
  137.     ELSE
  138.     GOSUB ASKQUIT
  139.     GOTO WELCOME
  140.     END IF
  141.  
  142.  
  143. CUSTINST:
  144.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  145.  
  146.     IF sz$ = "CONTINUE" THEN
  147.     ''Install only if it will fit.
  148.     FOR i% = 1 TO 5 STEP 1
  149.         IF GetListItem(BIGLIST$, i%) <> "" THEN
  150.         GOSUB TOOBIG
  151.         GOTO CUSTINST
  152.         END IF
  153.     NEXT i%
  154.     UIPop 1
  155.     GOTO INSTALL
  156.     ELSEIF sz$ = "PATH" THEN
  157.     GOTO GETPATH
  158.     ELSEIF sz$ = "CHK1" THEN
  159.     RecalcOptFiles IMAGEFILES
  160.     SetDriveStatus
  161.     GOTO CUSTINST
  162.     ELSEIF sz$ = "REACTIVATE" THEN
  163.     RecalcPath
  164.     SetDriveStatus
  165.     GOTO CUSTINST
  166.     ELSE
  167.     GOSUB ASKQUIT
  168.     GOTO CUSTINST
  169.     END IF
  170.  
  171.  
  172.  
  173. INSTALL:
  174.     ClearCopyList
  175.     AddOptFilesToCopyList IMAGEFILES
  176.     CreateDir DEST$, cmoNone
  177.     
  178.     IF GetListItem(CHECKSTATES$, IMAGEFILES) = "ON" THEN
  179.      IF DoesIniKeyExist("WIN.INI", "Image Library 3", "Dir") = 1 THEN
  180.          PcdDir$ = GetIniKeyString("WIN.INI", "Image Library 3", "Dir")
  181.          IF DoesFileExist(PcdDir$ + "IMAGE.EXE", femReadWrite) = 1 THEN
  182.          SetSymbolValue "ConfirmTextIn", PcdDir$
  183.          SetSymbolValue "EditFocus", "END"
  184.          sz$ = UIStartDlg(CUIDLL$, PCDSCSI, "FConfirmDlgProc", APPHELP, HELPPROC$)
  185.          IF sz$ = "BACK" THEN
  186.              UIPop 1
  187.              GOTO CUSTINST
  188.          ELSEIF sz$ = "CONTINUE" THEN
  189.              UIPop 1
  190.          END IF
  191.          END IF
  192.      END IF
  193.      IF PcdDir$ <> "" THEN
  194.          CreateIniKeyValue "WIN.INI", "Image Library 3", "Dir", PcdDir$, cmoOverwrite
  195.      ELSE
  196.          CreateIniKeyValue "WIN.INI", "Image Library 3", "Dir", DEST$, cmoOverwrite
  197.      END IF
  198.     END IF
  199.  
  200.     CopyFilesInCopyList
  201.  
  202.     InstDrive$=MID$(DEST$,1,2)
  203.     IF GetListItem(CHECKSTATES$, IMAGEFILES) = "ON" THEN
  204.     CreateProgmanGroup "Image Library 3", "", cmoNone
  205.     ShowProgmanGroup  "Image Library 3", 1, cmoNone
  206.     CreateProgmanItem "Image Library 3", "Image Library 3", MakePath(DEST$, "IMAGE.EXE "), "", cmoOverwrite
  207.     END IF
  208.  
  209. QUIT:
  210.     ON ERROR GOTO ERRQUIT
  211.  
  212.     IF ERR = 0 THEN
  213.     dlg% = EXITSUCCESS
  214.     ELSEIF ERR = STFQUIT THEN
  215.     dlg% = EXITQUIT
  216.     ELSE
  217.     dlg% = EXITFAILURE
  218.     END IF
  219. QUITL1:
  220.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  221.     IF sz$ = "REACTIVATE" THEN
  222.     GOTO QUITL1
  223.     END IF
  224.     UIPop 1
  225.  
  226.     END
  227.  
  228. ERRQUIT:
  229.     i% = DoMsgBox("Setup sources were corrupted, call Powersource Inc.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  230.     END
  231.  
  232.  
  233.  
  234. GETPATH:
  235.     SetSymbolValue "EditTextIn", DEST$
  236.     SetSymbolValue "EditFocus", "END"
  237. GETPATHL1:
  238.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  239.  
  240.     IF sz$ = "CONTINUE" THEN
  241.     olddest$ = DEST$
  242.     DEST$ = GetSymbolValue("EditTextOut")
  243.  
  244.     ''Validate new path.
  245.     IF IsDirWritable(DEST$) = 0 THEN
  246.         GOSUB BADPATH
  247.         GOTO GETPATHL1
  248.     END IF
  249.     UIPop 1
  250.  
  251.     ''Truncate display if too long.
  252.     IF LEN(DEST$) > 23 THEN
  253.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  254.     ELSE
  255.         ReplaceListItem DRIVETEXT$, 7, DEST$
  256.     END IF
  257.  
  258.     ''Recalc if path changed.
  259.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  260.         RecalcPath
  261.         SetDriveStatus
  262.     END IF
  263.  
  264.     olddest$ = ""
  265.     GOTO CUSTINST
  266.     ELSEIF sz$ = "REACTIVATE" THEN
  267.     RecalcPath
  268.     SetDriveStatus
  269.     GOTO GETPATHL1
  270.     ELSEIF sz$ = "EXIT" THEN
  271.     GOSUB ASKQUIT
  272.     GOTO GETPATHL1
  273.     ELSE
  274.     UIPop 1
  275.     GOTO CUSTINST
  276.     END IF
  277.  
  278.  
  279. TOOBIG:
  280.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  281.     IF sz$ = "REACTIVATE" THEN
  282.     RecalcPath
  283.     SetDriveStatus
  284.     GOTO TOOBIG
  285.     END IF
  286.     UIPop 1
  287.     RETURN
  288.  
  289.  
  290.  
  291. BADPATH:
  292.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  293.     IF sz$ = "REACTIVATE" THEN
  294.     RecalcPath
  295.     SetDriveStatus
  296.     GOTO BADPATH
  297.     END IF
  298.     UIPop 1
  299.     RETURN
  300.  
  301.  
  302.  
  303. ASKQUIT:
  304.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  305.  
  306.     IF sz$ = "EXIT" THEN
  307.     UIPopAll
  308.     ERROR STFQUIT
  309.     ELSEIF sz$ = "REACTIVATE" THEN
  310.     GOTO ASKQUIT
  311.     ELSE
  312.     UIPop 1
  313.     END IF
  314.     RETURN
  315.  
  316.  
  317.  
  318. '**
  319. '** Purpose:
  320. '**     Adds the specified option files to the copy list.
  321. '** Arguments:
  322. '**     ftype%  - type of files to add, one of the following:
  323. '**             IMAGEFILES
  324. '** Returns:
  325. '**     none.
  326. '*************************************************************************
  327. SUB AddOptFilesToCopyList (ftype%) STATIC
  328.  
  329.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  330.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  331.     WinDirLen = LEN(GetWindowsDir)-1
  332.     WinDir$ = MID$(GetWindowsDir,1,WinDirLen)
  333.     InstDrive$ = MID$(DEST$,1,2)
  334.     IF ftype% = IMAGEFILES THEN
  335.         AddSectionFilesToCopyList "IMAGEFiles", SrcDir$, DEST$ 
  336.         FLAG1$="Yes"
  337.         FLAG2$="Yes"
  338.         FLAG3$="Yes"
  339.     END IF
  340.     
  341.     IF FLAG1$="Yes" THEN
  342.         CreateIniKeyValue "WIN.INI", "Extensions", "PCD", DEST$ + "IMAGE.EXE ^.PCD", cmoNone
  343.         AddSectionFilesToCopyList "PcdDllFiles", SrcDir$, GetWindowsSysDir
  344.         IF DoesFileExist(GetWindowsDir + "PCDLIB.DLL", femReadWrite) =1 THEN
  345.         RemoveFile GetWindowsDir + "PCDLIB.DLL", cmoNone
  346.         END IF
  347.         IF DoesFileExist(GetWindowsDir + "PCDXTIF.DLL", femReadWrite) =1 THEN
  348.         RemoveFile GetWindowsDir + "PCDXTIF.DLL", cmoNone
  349.         END IF
  350.         IF DoesFileExist(GetWindowsDir + "PCDXEPS.DLL", femReadWrite) =1 THEN
  351.         RemoveFile GetWindowsDir + "PCDXEPS.DLL", cmoNone
  352.         END IF
  353.         IF DoesFileExist(GetWindowsDir + "PCDXPCX.DLL", femReadWrite) =1 THEN
  354.         RemoveFile GetWindowsDir + "PCDXPCX.DLL", cmoNone
  355.         END IF
  356.         IF DoesFileExist(GetWindowsDir + "PCDXBMP.DLL", femReadWrite) =1 THEN
  357.         RemoveFile GetWindowsDir + "PCDXBMP.DLL", cmoNone
  358.         END IF
  359.     END IF
  360.     IF FLAG2$="Yes" THEN
  361.         AddSectionFilesToCopyList "PcdCtlFile", SrcDir$, GetWindowsSysDir
  362.     END IF
  363.     IF FLAG3$="Yes" THEN
  364.         AddSectionFilesToCopyList "PcdDllFile", SrcDir$, GetWindowsSysDir
  365.     END IF
  366.     
  367.     FLAG1$="No"
  368.     FLAG2$="No"
  369.     FLAG3$="No"
  370.     SrcDir$ = ""
  371.     END IF
  372. END SUB
  373.  
  374. '**
  375. '** Purpose:
  376. '**     Recalculates disk space for the given option files and sets
  377. '**     the status info symbol "StatusItemsText".
  378. '** Arguments:
  379. '**     ftype% - type of files to add, one of the following:
  380. '**             IMAGEFILES
  381. '** Returns:
  382. '**     none.
  383. '*************************************************************************
  384. SUB RecalcOptFiles (ftype%) STATIC
  385.     CursorSave% = ShowWaitCursor()
  386.     ClearCopyList
  387.     AddOptFilesToCopyList ftype%
  388.  
  389.     fExtra% = 0
  390.     IF ftype% = IMAGEFILES THEN
  391.     ListSym$ = IMAGENEEDS$
  392.        IF GetListItem(CHECKSTATES$, IMAGEFILES) = "ON" THEN
  393.        ''Add extra cost to Windows drive for ini/progman, etc.
  394.        ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  395.        ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  396.        fExtra% = 1
  397.        END IF
  398.     END IF
  399.  
  400.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  401.  
  402.     cost& = 0
  403.     FOR i% = 1 TO 26 STEP 1
  404.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  405.     NEXT i%
  406.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  407.  
  408.     IF StillNeed& > 0 THEN
  409.     ReplaceListItem BIGLIST$, ftype%, "YES"
  410.     ELSE
  411.     ReplaceListItem BIGLIST$, ftype%, ""
  412.     END IF
  413.  
  414. '    IF fExtra% THEN
  415. '        ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  416. '    END IF
  417.     RestoreCursor CursorSave%
  418.     ListSym$ = ""
  419. END SUB
  420.  
  421.  
  422. '**
  423. '** Purpose:
  424. '**     Recalculates disk space and sets option status info according
  425. '**     to the current destination path.
  426. '** Arguments:
  427. '**     none.
  428. '** Returns:
  429. '**     none.
  430. '*************************************************************************
  431. SUB RecalcPath STATIC
  432.  
  433.     CursorSave% = ShowWaitCursor()
  434.  
  435.     RecalcOptFiles IMAGEFILES
  436.  
  437.     RestoreCursor CursorSave%
  438. END SUB
  439.  
  440.  
  441. '**
  442. '** Purpose:
  443. '**     Sets drive status info according to latest disk space calcs.
  444. '** Arguments:
  445. '**     none.
  446. '** Returns:
  447. '**     none.
  448. '*************************************************************************
  449. SUB SetDriveStatus STATIC
  450.  
  451.     drive$ = MID$(DEST$, 1, 1)
  452.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  453.     cost& = VAL(GetListItem(IMAGENEEDS$, ndrive%))
  454.     free& = GetFreeSpaceForDrive(drive$)
  455.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  456.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  457.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  458.  
  459.     IF drive$ = WINDRIVE$ THEN
  460.     ReplaceListItem DRIVETEXT$, 4, ""
  461.     ReplaceListItem DRIVETEXT$, 5, ""
  462.     ReplaceListItem DRIVETEXT$, 6, ""
  463.     ELSE
  464.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  465.     cost& = VAL(GetListItem(IMAGENEEDS$, ndrive%))
  466.     IF cost& = 0 THEN
  467.         ReplaceListItem DRIVETEXT$, 4, ""
  468.         ReplaceListItem DRIVETEXT$, 5, ""
  469.         ReplaceListItem DRIVETEXT$, 6, ""
  470.     ELSE
  471.         free& = GetFreeSpaceForDrive(WINDRIVE$)
  472.         ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  473.         ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  474.         ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  475.     END IF
  476.     END IF
  477. END SUB
  478.  
  479.  
  480. '**
  481. '** Purpose:
  482. '**     Appends a file name to the end of a directory path,
  483. '**     inserting a backslash character as needed.
  484. '** Arguments:
  485. '**     szDir$  - full directory path (with optional ending "\")
  486. '**     szFile$ - filename to append to directory
  487. '** Returns:
  488. '**     Resulting fully qualified path name.
  489. '*************************************************************************
  490. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  491.     IF szDir$ = "" THEN
  492.     MakePath = szFile$
  493.     ELSEIF szFile$ = "" THEN
  494.     MakePath = szDir$
  495.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  496.     MakePath = szDir$ + szFile$
  497.     ELSE
  498.     MakePath = szDir$ + "\" + szFile$
  499.     END IF
  500. END FUNCTION
  501.  
  502.